@model WalkingTec.Mvvm.Core.BaseVM
<style>
  a {
    color: #01aaed
  }
</style>
<wt:quote>
  <p>从2.4.0开始，框架支持Cookie和Jwt两种模式
</wt:quote>

<wt:fieldset field-set-style="Simple" title="CookieAuth及JwtAuth说明">
<p>
  <P>token: CookieAuth 与 JwtAuth 所生成的 token 默认均只包含 Id 及 Name 属性（后期计划可自定义配置 Claim）;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    已颁发的 token 不会在系统重启之后就立即失效。token 的有效期都在 token 里面保存;
  </P>
  <br>

  <P>关于token刷新：/api/_Account/RefreshToken 接口是给 JwtAuth 用的，用于手动刷新 token，<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    CookieAuth 所对应的中间件中（Authentication）会自动检测 token 有效时间，并自动刷新 token 有效期<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    （默认实现中 token 的刷新时间是设置时间的一半时间即 3600s 后会刷新）;
  </P>
  <br>
  <P>用户信息：用户信息相关数据均只存在于内存中，用户请求到达后端后根据 token 中的用户 Id 获取用户信息（后期计划可自定义开发并配置用户信息存储）;</P>

</p>
</wt:fieldset>

<wt:fieldset field-set-style="Simple" title="指定认证方式">
<p>
  在Controller或方法上加[AuthorizeCookie],[AuthorizeJwt],[AuthorizeJwtWithCookie]标记，可以指定认证方式
</p>
<table lay-filter="parse-table-demo">
  <thead>
    <tr>
      <th lay-data="{field:'username', width:200}">属性</th>
      <th lay-data="{field:'joinTime', width:600}">描述</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>[AuthorizeJwtWithCookie]</td>
      <td>同时支持cookie和jwt</td>
    </tr>
    <tr>
      <td>[AuthorizeJwt]</td>
      <td>只支持jwt</td>
    </tr>
    <tr>
      <td>[AuthorizeCookie]</td>
      <td>只支持Cookie，如没有指定认证方式，默认使用这种</td>
    </tr>
  </tbody>
</table>
</wt:fieldset>

<wt:fieldset field-set-style="Simple" title="配置文件">
  <p>appsettings中多加了JwtOptions和CookieOptions两个部分，来配置过期时间等具体参数</p>
</wt:fieldset>
<wt:code title="appsettings.json">
 {
  "JwtOptions": {
    "Issuer": "http://localhost",
    "Audience": "http://localhost",
    "Expires": 3600,
    "SecurityKey": "superSecretKey@345",
    "RefreshTokenExpires": 86400,
    "LoginPath": "/Login/Login"
  },
  "CookieOptions": {
    "Issuer": "http://localhost",
    "Audience": "http://localhost",
    "Expires": 3600,
    "SlidingExpiration": true,
    "SecurityKey": "superSecretKey@345",
    "RefreshTokenExpires": 86400,
    "LoginPath": "/Login/Login"
  },
}
</wt:code>

<wt:fieldset field-set-style="Simple" title="使用swagger测试jwt">
  <p>框架中的Api文档支持对jwt的调用</p>
  <p>对于使用Cookie验证的接口，登陆系统之后打开api文档界面就可以直接测试运行</p>
  <p>对于使用jwt验证的接口，需要在swagger页面中手动输入jwt token，具体方法为：</p>

  <p>先调用登陆接口，最后一个参数设为false代表不使用cookie，使用jwt</p>
  <img src="~/imgs/jwt1.png" /><br /><br />

  <p>调用成功后可以看到接口返回了jwt的token</p>
  <img src="~/imgs/jwt2.png" /><br /><br />

  <p>点击右上角Authorize按钮，在弹出窗口中输入Bearer空格，然后复制上面接口返回的token值</p>
  <img src="~/imgs/jwt3.png" /><br /><br />

  <p>然后就可以去调用测试jwt的接口了</p>
</wt:fieldset>

  <script>
    layui.use('code', function () { layui.code({ about: false }) })
    layui.table.init('parse-table-demo', {
      limit: 100, page: false
    });
  </script>
<script>
  $("#@Model.ViewDivId").parent().css("height", "auto");
</script>
